package com.algaworks.cursojsf2.financeiro.repository.infra;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.algaworks.cursojsf2.financeiro.model.Lancamento;
import com.algaworks.cursojsf2.financeiro.model.Pessoa;
import com.algaworks.cursojsf2.financeiro.repository.Pessoas;

public class PessoasHibernate implements Pessoas {

	private Session session;
	
	public PessoasHibernate(Session session) {
		this.session = session;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Pessoa> todas() {
	
		return session.createCriteria(Pessoa.class)
				.addOrder(Order.asc("nome"))
				.list();
	}

	@Override
	public Pessoa porCodigo(Integer codigo) {
		
		return (Pessoa) this.session.get(Pessoa.class, new Integer(codigo));
	}

	@Override
	public Pessoa guardar(Pessoa pessoa) {
		return (Pessoa) this.session.merge(pessoa);		
	}

	@Override
	public void excluir(Pessoa pessoa) {
		 this.session.delete(pessoa);
	}

	@Override
	public boolean temLancamento(Pessoa pessoa) {
		@SuppressWarnings("unchecked")
		List<Lancamento> lancamentosPessoa = (List<Lancamento>) this.session.createCriteria(Lancamento.class)
		.add(Restrictions.eq("pessoa", pessoa)).list();
		
		return lancamentosPessoa.isEmpty(); 
	}
	
}
